package java学习.第17章_反射机制;

import org.junit.Test;
/**
 * 类只会有一个
 *
 */
public class C_获取Class实例 {

    @Test
    public void 获取Class实例() throws ClassNotFoundException {
        System.out.println("----调静态属性-------------------");
        Class<FS> class1 = FS.class;

        System.out.println("----调Object的方法-------------------");
        FS fs = new FS();
        Class<? extends FS> class2 = fs.getClass();
        System.out.println("----调 Class的静态方法，放入全类名-------------------");
        //调用此方法后，就将此类加载了器静态相关
        Class<?> class3 = Class.forName("java学习.第17章_反射机制.FS");

        /**
         * 类加载器
         * 引导类加载器:用C++编写的，是JVM自带的类加载器，
         *          负责Java平台核心库，用来装载核心类
         *          库。该加载器无法直接获取
         * 扩展类加载器:负责ie/ib/ex目录下的jar包或
         *          -D java.ext.dirs指定目录下的ar包装入工作库
         * 系统类加载器:负责java -classpath或
         *          -D java.class.path所指的目录下的类与
         *          jar包装入工作，是最常用的加载器
         */
        System.out.println("----使用类的加载器-------------------");
        Class<?> class4 = ClassLoader.getSystemClassLoader().loadClass("java学习.第17章_反射机制.FS");


        System.out.println(class1 == class2);//true
        System.out.println(class1 == class3);//true
        System.out.println(class1 == class4);//true

    }
    @Test
    public void 类加载器的顺序(){
        Object object =new Object();
        System.out.println(object.getClass().getClassLoader());//根加载器 无
        //System.out.println(object.getClass().getClassLoader().getParent());
        //System.out.println(object.getClass().getClassLoader().getParent().getParent());

        C_获取Class实例 jvm = new C_获取Class实例();
        System.out.println(jvm.getClass().getClassLoader());//jvm是谁装载的
        System.out.println(jvm.getClass().getClassLoader().getParent());//jvm的上一个装载器
        System.out.println(jvm.getClass().getClassLoader().getParent().getParent());//jvm的上上一个装载
    }

}
